/**
 * 前端加密工具类
 * 使用AES-256-ECB加密，与后端DataEncryptionUtils保持一致
 */

import CryptoJS from 'crypto-js';

// 密钥（与后端保持一致，生产环境应通过环境变量配置）
const SECRET_KEY = 'ChildEnglishPlatform2024SecretKey!@#$%^&*()';

/**
 * 生成AES密钥（从字符串密钥派生，使用SHA-256）
 */
function getKey() {
  // 使用SHA-256哈希确保密钥长度为256位，与后端保持一致
  return CryptoJS.SHA256(SECRET_KEY);
}

/**
 * 使用AES-ECB加密数据
 * @param {string} data - 要加密的明文数据
 * @returns {string} Base64编码的加密数据
 */
export function encrypt(data) {
  if (!data || data === '') {
    return data;
  }

  try {
    const key = getKey();
    
    // 使用AES-ECB模式加密（与后端保持一致）
    const encrypted = CryptoJS.AES.encrypt(data, key, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    });
    
    // 获取纯密文并转换为Base64字符串（与后端格式一致）
    return encrypted.ciphertext.toString(CryptoJS.enc.Base64);
  } catch (error) {
    console.error('加密失败:', error);
    throw new Error('数据加密失败: ' + error.message);
  }
}

/**
 * 使用AES-ECB解密数据
 * @param {string} encryptedData - Base64编码的加密数据
 * @returns {string} 解密后的明文数据
 */
export function decrypt(encryptedData) {
  if (!encryptedData || encryptedData === '') {
    return encryptedData;
  }

  try {
    const key = getKey();
    
    // 将Base64字符串转换为CipherParams对象
    const cipherParams = CryptoJS.lib.CipherParams.create({
      ciphertext: CryptoJS.enc.Base64.parse(encryptedData)
    });
    
    // 使用AES-ECB模式解密
    const decrypted = CryptoJS.AES.decrypt(cipherParams, key, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    });
    
    // 转换为UTF-8字符串
    return decrypted.toString(CryptoJS.enc.Utf8);
  } catch (error) {
    console.error('解密失败:', error);
    throw new Error('数据解密失败: ' + error.message);
  }
}

/**
 * 加密密码（用于登录和注册）
 * @param {string} password - 明文密码
 * @returns {string} 加密后的密码
 */
export function encryptPassword(password) {
  return encrypt(password);
}

